package com.haibo.component;

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.util.Arrays;
import java.util.List;
import java.util.Set;

/**
 * @Author : 刘海波
 * @Date: 2025-08-23 23:04
 * @Description:
 */
@Component
@Order(98)
@Slf4j
public class MyApplicationRunner implements ApplicationRunner {

    public MyApplicationRunner() {
        log.info("MyApplicationRunner 无参构造执行了...");
    }

    /**
     * args.getNonOptionArgs();可以用来获取命令行中的无key参数（和CommandLineRunner一样）。
     * args.getOptionNames();可以用来获取所有key/value形式的参数的key。
     * args.getOptionValues(key));可以根据key获取key/value 形式的参数的value。
     * args.getSourceArgs(); 则表示获取命令行中的所有参数。
     * @param args
     * @throws Exception
     */
    @Override
    public void run(ApplicationArguments args) throws Exception {
        log.info("server start,MyApplicationRunner do something init work here!params:{}", Arrays.asList(args));
        List<String> nonOptionArgs = args.getNonOptionArgs();
        log.info("nonOptionArgs:{}",nonOptionArgs);

        Set<String> optionNames = args.getOptionNames();
        for (String optionName : optionNames) {
            log.info("key:{},value:{}",optionName,args.getOptionValues(optionName));
        }

        String[] sourceArgs = args.getSourceArgs();
        log.info("sourceArgs:{}",Arrays.toString(sourceArgs));
    }
}
